<!DOCTYPE html>
<html lang="zh">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>
    
    程序举例（结构体与共用体） - DSRBLOG
    
  </title>
  

  
  
  <link href="atom.xml" rel="alternate" title="DSRBLOG" type="application/atom+xml">
  <link rel="stylesheet" href="asset/css/style.min.css">
  <link rel="stylesheet" href="asset/css/doc.css">
  <script src="asset/app.js"></script>


</head>

<body> <section class="ct-body">
	<div class="container">
		<div class="columns is-variable bd-klmn-columns is-4 is-centered">
			<div class="column is-four-fifths">
				<div class="post-body single-content">
					
					<h1 class="title">
						程序举例（结构体与共用体）
					</h1>


					<div class="media">
						
						
						<div class="media-content">
							<div class="content">
								<p>
									<span class="date">2022/01/28 01:53 上午</span>
									

									

									<br />
									<span class="tran-tags">Tags:</span>&nbsp;
									
									<a class="tag is-link is-light">#C语言</a>
									

								</p>
							</div>
						</div>

					</div>
				</div>
				<article class="markdown-body single-content">
					<p>定义结构数组，输入以下学生信息表，计算出每个成员的平均成绩，并按降序排列输出</p>
<p><img src="media/16433059871711/16443439460948.jpg" alt="" /></p>
<h3><a id="%E4%BB%A3%E7%A0%81" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>代码</h3>
<pre class="line-numbers"><code class="language-c">#include &lt;stdio.h&gt;
#define N 3

//声明结构体变量，并定义包含学生信息的结构体内容
struct student
{
    char num[4];
    char name[20];
    int cn;
    int math;
    int pc;
    double avg;
} infotable[N];

//输入成绩
void input(int n)
{
    int i;
    for (i = 0; i &lt; n; i++)
    {
        printf(&quot;请输入第%d个学生的信息\n&quot;, i + 1);
        printf(&quot;学号：&quot;);
        gets(infotable[i].num);
        printf(&quot;姓名：&quot;);
        gets(infotable[i].name);
        printf(&quot;成绩（语文 数学 计算机）：&quot;);
        scanf(&quot;%d %d %d&quot;, &amp;infotable[i].cn, &amp;infotable[i].math, &amp;infotable[i].pc);
        infotable[i].avg = (double)(infotable[i].cn + infotable[i].math + infotable[i].pc) / N;
        printf(&quot;\n&quot;);
        getchar(); //接受缓存中的最后一个字符，避免\n的影响下一轮操作
    }
}

//排序
void sort(int n)
{
    int i, j;
    struct student max;

    for (i = 0; i &lt; N; i++)
    {
        max = infotable[i];
        for (j = i; j &lt; N; j++)
        {
            //交换当前元素与最大值元素的结构体元素位置
            if (max.avg &lt; infotable[j].avg)
            {
                max = infotable[j];
                infotable[j] = infotable[i];
                infotable[i] = max;
            }
        }
    }
}

//输出学生信息
void output(int n)
{
    int i;

    //按平均分进行降序排列并输出
    for (i = 0; i &lt; N; i++)
    {
        printf(&quot;学号：%s\n姓名：%s\n三科成绩：%d %d %d\n平均分：%.2f\n\n&quot;, infotable[i].num, infotable[i].name, infotable[i].cn, infotable[i].math, infotable[i].pc, infotable[i].avg);
    }
}

int main()
{
    input(N);
    sort(N);
    output(N);

    return 0;
}
</code></pre>
<h3><a id="%E8%BE%93%E5%85%A5" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>输入</h3>
<pre class="line-numbers"><code class="language-c">请输入第1个学生的信息
学号：012
姓名：李四
成绩（语文 数学 计算机）：60 82 72

请输入第2个学生的信息
学号：002
姓名：王五
成绩（语文 数学 计算机）：90 80 64

请输入第3个学生的信息
学号：020
姓名：张三
成绩（语文 数学 计算机）：86 78 90
</code></pre>
<h3><a id="%E7%BB%93%E6%9E%9C" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>结果</h3>
<pre class="line-numbers"><code class="language-c">学号    姓名    语文    数学    计算机    平均分
020     张三    86      78     90      84.67
002     王五    90      80     64      78.00
012     李四    60      82     72      71.33
</code></pre>

				</article>
				<div class="comments-wrap">
					<div class="share-comments">
						

						

						
					</div>
				</div><!-- end comments wrap -->
			</div>
		</div><!-- end columns -->
	</div><!-- end container -->
</section>  














<script src="asset/prism.js"></script>









</body>

</html>